export default {
    namespaced:true,
    
    // 状态数据
    state:() => ({
        // 购物车数据
        cart:JSON.parse(uni.getStorageSync('cart') || '[]')
    }),
    // 修改state数据
    mutations: {
        // 向购物车中添加商品
        addToCart(state,goods) {
            // 添加之前判断此商品有没有添加过
            const result = state.cart.find(item => item.goods_id === goods.goods_id)
            // 添加过，修改商品数量
            if(result) {
                result.goods_count += 1
            }else {
                // 没有添加过
                state.cart.push(goods)
            }
            // 保存到本地
            this.commit('m_cart/saveToStorage')
            // console.log(JSON.stringify(state.cart))
           
        },
        
        // 更新购物车中商品的勾选状态
        updateGoodsState(state, goods) {
          // 根据 goods_id 查询购物车中对应商品的信息对象
          const result = state.cart.find(item => item.goods_id === goods.goods_id)
          // 有对应的商品信息对象
          if (result) {
            // 更新对应商品的勾选状态
            result.goods_state = goods.goods_state
            // 持久化存储到本地
            this.commit('m_cart/saveToStorage')
          }
        },
        
        // 更新购物车中商品的数量
        updateGoodsCount(state,goods){
            // 根据 goods_id 查询购物车中对应商品的信息对象
            const result = state.cart.find(item => item.goods_id === goods.goods_id)
            // 有对应的商品信息对象
            if (result) {
              // 更新对应商品的数量
              result.goods_count = goods.goods_count
              // 持久化存储到本地
              this.commit('m_cart/saveToStorage')
            }
        },
        // 修改全部商品的选中状态
        updateAllGoodsState(state, newState){
            state.cart.forEach(item => item.goods_state = newState)
            // 持久化存储到本地
            this.commit('m_cart/saveToStorage')
        },
        
        // 保存购物车信息到本地
        saveToStorage(state) {
           uni.setStorageSync('cart', JSON.stringify(state.cart))
        },
      
    },
    // 计算属性
     getters: {
         // 购物车商品总数量
         total(state) {
             return state.cart.reduce((acc,item) => acc + item.goods_count,0)
         },
         // 商品全部选中的状态
         isFullCheck(state){
           let result =  state.cart.every(goods => goods.goods_state === true)
           return result
         },
         // 计算所有选中商品的价格
         totalPrice(state){
            return state.cart.filter(goods => goods.goods_state === true).reduce((acc,item) => acc + item.goods_count * item.goods_price,0).toFixed(2)
         },
         // 计算选中商品的数量总和
         checkedCount(state) {
             // 筛选出选中的
          return state.cart.filter(goods => goods.goods_state === true).reduce((acc,item) => acc + item.goods_count,0)
           // return state.cart.filter(item => item.goods_state)
           //                   .reduce((acc, item) => acc += item.goods_count, 0)
         }
     },
}